function _promiseAll(arr) {
  // 需要注意的一个点
  // 1. 需要返回一个Promise，因为需要链式调用
  return new Promise((resolve, reject) => {
    if (Array.isArray(arr)) {
       reject(new Error("xxx"));
    }

    const res = new Array(arr.length),
      arrLength = arr.length;
    // 这里需要定义一个已经处理的conut，计数器
    let count = 0;

    arr.forEach((p, index) => {
      // 这里需要从resolve包裹一次，防止不是Promise对象
      p.resolve().then((data) => {
        if (data) {
          res[index] = data;
          // 一次处理，计数器增加一个
          count++;
        }
      });
      // 只有达到了参数长度的结果，才能输出
      if (count === arrLength) {
        resolve(res);
      }
    });

  });
}

function promiseAllV2(promises) {
  return new Promise((resolve, reject) => {
    if (!Array.isArray(promises)) return reject(new Error("参数为数组"));

    let res = [],
      count = 0;
    for (let i = 0; i < promises.length; i++) {
      Promise.resolve(promises[i]).then((data) => {
        if (data) {
          res[i] = data;
          count++;
        }
      });
      if (count === promises.length) {
        return res;
      }
    }
  });
}